package com.pethospital.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pethospital.dto.MedicalRecordDTO;
import com.pethospital.dto.VaccineDTO;
import com.pethospital.entity.MedicalRecord;
import com.pethospital.entity.Vaccine;

import java.util.List;

/**
 * 健康档案服务接口
 */
public interface MedicalRecordService extends IService<MedicalRecord> {

    /**
     * 添加健康档案
     *
     * @param medicalRecordDTO 健康档案DTO
     * @param staffId          医生ID
     * @return 档案ID
     */
    Long addMedicalRecord(MedicalRecordDTO medicalRecordDTO, Long staffId);

    /**
     * 获取宠物所有健康档案
     *
     * @param petId 宠物ID
     * @return 健康档案列表
     */
    List<MedicalRecord> getPetMedicalRecords(Long petId);

    /**
     * 获取宠物健康档案分页
     *
     * @param petId 宠物ID
     * @param page  页码
     * @param size  每页大小
     * @return 健康档案分页
     */
    Page<MedicalRecord> getPetMedicalRecordsPage(Long petId, int page, int size);

    /**
     * 获取健康档案详情
     *
     * @param id 档案ID
     * @return 档案详情
     */
    MedicalRecord getMedicalRecord(Long id);

    /**
     * 更新健康档案
     *
     * @param id            档案ID
     * @param medicalRecordDTO 档案DTO
     * @param staffId         医生ID
     * @return 是否成功
     */
    boolean updateMedicalRecord(Long id, MedicalRecordDTO medicalRecordDTO, Long staffId);

    /**
     * 获取医生创建的健康档案
     *
     * @param staffId 医生ID
     * @param page    页码
     * @param size    每页大小
     * @return 健康档案分页
     */
    Page<MedicalRecord> getStaffMedicalRecords(Long staffId, int page, int size);

    /**
     * 根据预约ID获取健康档案
     *
     * @param appointmentId 预约ID
     * @return 健康档案，如果不存在则返回null
     */
    MedicalRecord getMedicalRecordByAppointmentId(Long appointmentId);

    /**
     * 添加疫苗记录
     *
     * @param vaccineDTO 疫苗记录DTO
     * @param userId     用户ID
     * @return 疫苗记录ID
     */
    Long addVaccineRecord(VaccineDTO vaccineDTO, Long userId);

    /**
     * 根据宠物ID获取疫苗记录列表
     *
     * @param petId 宠物ID
     * @return 疫苗记录列表
     */
    List<Vaccine> getVaccineRecordsByPetId(Long petId);
} 